<?php	namespace Hdphp\Libs;
class App
{
	public static function run()
	{
		//1.初始化框架
		self::init();
		//注册一个自动载入的函数
		//当实例化一个未找见类的时候，会自动触发当前类【__CLASS__】里面的auto方法
		spl_autoload_register([__CLASS__,"auto"]);
		//执行应用（实例化）
		App::autoRun();
	}
	private static function auto($cname)
	{
		//p($cname);	
		//在这里加载文件的时候，路径都是根据命名空间来的
		//Home\Controller\IndexController
		//p($cname);
		//p(substr($cname, -10));
		if(substr($cname, -10) == "Controller"){
			//这里的加载没有问题，访问页面的时候就应该能看到IndexController.php当中index方法的输出	
			//控制器
			$path = "App/" . str_replace("\\", "/", $cname) . ".php";
			//p($path);
		}else{
			//工具类
			//【Hdphp\Tools\Code】
			//$path = "Hdphp/Tools/Code.php";
			$path = str_replace("\\", "/", $cname) . ".php";
		}
		require $path;
	}
	private static function autoRun()
	{
		//首先写死【\Home\Controller\IndexController】，进行该地址的实例化，在这些的时候命名空间是没有问题的，但是会报错，找不见类【原因是类没有被载入】
		//自动载入的功能
		
		$m = MODULE;//地址栏传来的请求时哪一个模块
		$c = CONTROLLER;//地址栏传来的请求时哪一个控制器
		$a = ACTION;//地址栏传来的请求时哪一个方法
		
		//注意转译
		$controller = "\\{$m}\Controller\\{$c}Controller";
		$obj = new $controller;
		$obj->$a();
	}
	/**
	 * 初始化
	 */
	private static function init()
	{
		//$_GET['m']代表所操作的模块
		$m = isset($_GET['m']) ? $_GET['m'] : "Home";
		define("MODULE", $m);
		//$_GET['c']代表操作的控制器
		$c = isset($_GET['c']) ? $_GET['c'] : "Index";
		define("CONTROLLER", $c);
		//$_GET['a']代表操作的方法
		$a = isset($_GET['a']) ? $_GET['a'] : "index";
		define("ACTION", $a);
		//配置项的加载（注意，一定要先加载系统的配置项，再加载用户自己）
		//需要自己在系统和用户的配置项简单些几个配置
		//先加载系统
		$systemConfig = include "Config.php";
		//p($systemConfig);
		C($systemConfig);
		//加载用户配置项
		$userConfig = include "App/Home/Config/Config.php";
		//p($userConfig);
		C($userConfig);
		//设置时区,从配置项进行读取
		//date_default_timezone_set("PRC");
		date_default_timezone_set(C("TIMEZONE"));
		//开启session
		session_id() || session_start();
		
	}

}
